/**
 * Adding bind into Function prototype if not defined native.
 */
if(!Function.prototype.bind) {
	Function.prototype.bind = function(obj) {
		var slice = [].slice,
	        args = slice.call(arguments, 1), 
	        self = this, 
	        nop = function() {}, 
	        bound = function() {
	          return self.apply(this instanceof nop ? this : (obj || {}), 
	        		  args.concat(slice.call(arguments)));    
	        };
	    nop.prototype = self.prototype;
	    bound.prototype = new nop();
	    return bound;
	};
}

/**
 * Stamps the object with unique ID.
 */
Core.uid = Env.stamp.bind(Env);